热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

干货|滴滴数据分析原来是这样做的!

干货,滴滴,数据,分析,
↑  点击上方 “凹凸数据” 关注 +  星标  ~ 
每天更新,干货&福利不断  

hi,我是 Rilke Yang

这是一篇我关于滴滴的数据实战,之前首发在和鲸,这次投稿到凹凸数据,希望能够帮助到大家~

原文链接:https://www.kesci.com/home/project/5f06b0193af6a6002d0fa357

随着企业日常经营活动的进行,企业内部必然产生了各式各样的数据,如何利用这些数据得出有益的见解,并支持我们下一步的产品迭代以及领导决策就显得尤为重要。

A/B测试是互联网企业常用的一种基于数据的产品迭代方法,它的主要思想是在控制其他条件不变的前提下对不同(或同一、同质)样本设计不同实验水平(方案),并根据最终的数据变现来判断自变量对因变量的影响;A/B测试的理论基础主要源于数理统计中的假设检验部分,此部分统计学知识读者可自行探索。

长话短说,本次实战用到的数据集分为两个Excel文件,其中test.xlsx为滴滴出行某次A/B测试结果数据,city.xlsx为某城市运营数据。

数据说明

test.xlsx city.xlsx
date:日期 date:日期
group:组别(控制组/实验组) hour:时点
requests:订单请求数 requests:请求数
gmv:成交总额 trips:订单数
coupon per trip:每单优惠券金额 supply hours:可服务时长
trips:订单数 average minutes of trips:平均订单时长(分钟)
canceled requests:取消请求数 pETA:顾客预计等待时长

aETA:顾客实际等待时长

utiliz:司机在忙率

test.xlsx 数据可以用来判断实验条件对此次A/B测试的结果影响是否显著;city.xlsx 数据可以用来探索该城市运营中出现的问题,根据关键结论辅助决策。

在本文中,我们将使用该数据来做A/B测试效果分析城市运营分析

一、A/B测试效果分析

1、数据导入

#A/B测试结果数据导入

import pandas as pd

test = pd.read_excel('/home/kesci/input/didi4010/test.xlsx')
test.head()

2、计算ROI

#计算优惠券投入相对gmv的ROI

test['ROI']=test['gmv']/(test['coupon per trip']*test['trips'])
test.head()

3、requests检验

数据共58条,对照组与实验组各29条,样本量<30。

3.1 requests方差检验

  1. 记两组requests方差分别为从c1,c2
  2. 零假设H0:c1=c2;备选假设:H1:c1≠c2
  3. 显著性水平取0.05
#levene检验requests是否齐方差

requests_A=test[test.group=='control'].requests
requests_B=test[test.group=='experiment'].requests

import scipy.stats as st
st.levene(requests_A,requests_B)

p值大于0.05,不拒绝原假设,因此可认为两组实验requests齐方差。

3.2 requests均值检验

  1. 该数据为同一样本实验前后的不同水平,因此选用配对样本t检验。
  2. 记两组requests均值分别为从u1,u2
  3. 零假设H0:u1=u2;备选假设:H1:u1≠u2
  4. 显著性水平取0.05
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)

st.ttest_rel(requests_A,requests_B)

p值大于0.05,不拒绝原假设,因此可认为实验条件对requests影响不显著。

4、gmv检验

4.1 gmv方差检验

#levene检验gmv是否齐方差

gmv_A=test[test.group=='control'].gmv
gmv_B=test[test.group=='experiment'].gmv

st.levene(gmv_A,gmv_B)

p值大于0.05,不拒绝原假设,因此可认为两组实验gmv齐方差。

4.2 gmv均值检验

#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)

st.ttest_rel(gmv_A,gmv_B)

p值小于0.05,拒绝原假设,因此可认为实验条件对gmv有显著影响。

5、ROI检验

5.1 ROI方差检验

#levene检验ROI是否齐方差

ROI_A=test[test.group=='control'].ROI
ROI_B=test[test.group=='experiment'].ROI

st.levene(ROI_A,ROI_B)

p值大于0.05,不拒绝原假设,因此可认为两组实验ROI齐方差。

5.2 ROI均值检验

#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)

st.ttest_rel(ROI_A,ROI_B)

p值小于0.05,拒绝原假设,因此可认为实验条件对ROI有显著影响。

二、城市运营分析

1、数据导入

#导入该城市运营相关数据

city = pd.read_excel('/home/kesci/input/didi4010/city.xlsx')
city.head()
#查看数据有无缺失值

city.info()

2、数据探索

2.1 单量最多的时间点

req_hour = city.groupby(['hour'],as_index=True).agg({'requests':sum},inplace=True)
req_hour
#绘制各时点订单请求柱状图

import matplotlib.pyplot as plt

req_hour.plot(kind='bar')
plt.xticks(rotation=0)

plt.show()

可见,在11、12、13这三个时间点内,12点用户发起订单的需求是最大的,其次是13点,11点。

司机运营平台应考虑加大该时点车辆供应。

2.2 单量最多的日期

req_date = city.groupby(['date'],as_index=True).agg({'requests':sum},inplace=True)
req_date.sort_values('date').head()
#绘制订单请求数随日期变化的折线图

req_date.plot(kind='line')

plt.show()

单月订单请求数随日期的变化呈周期性变化,我们猜测4个峰值分别对应4个周末,周末用户出行需求较大。

经验证发现猜想与数据吻合,因此司机运营平台应考虑加大周末、节假日的车辆供给。

2.3 各时段订单完成率

com_hour = city.groupby(['hour'],as_index=False).agg({'requests':sum,'trips':sum},inplace=True)
com_hour['rate']=com_hour['trips']/com_hour['requests']
com_hour

13点订单需求较多,但订单完成率仅47%,说明较多订单没有得到及时相应。

客运部应重点关注13点订单相应时长,排查具体原因。

2.4 单月每日订单完成率

com_date = city.groupby(['date'],as_index=True).agg({'requests':sum,'trips':sum},inplace=True)
com_date['rate']=com_date['trips']/com_date['requests']
com_date.sort_values('date').head()
#绘制订单完成率随日期变化的折线图

com_date.rate.plot(kind='line')

plt.show()

单月每日订单完成率规律不太明显,但几个谷值基本都出现在周末附近,说明客户出行需求的提升可能导致响应率的降低。

2.5 顾客等待时间

import numpy as np

eta_hour = city.groupby(['hour'],as_index=True).agg({'pETA':np.mean,'aETA':np.mean},inplace=True)
eta_hour
#绘制顾客等待时长复合柱状图

eta_hour.plot(kind='bar')

以上可见,无论哪个时点,用户实际等待时长均明显大于用户预计等待时长。

各时点用户等待时长差异不明显,但13点最高。

客运部一方面应提升用户预计等待时长的准确性,另一方面优化平台派单逻辑等。

2.6 司机在忙率

city['busy'] = city['supply hours']*city['utiliz']
city.head()
busy_hour = city.groupby(['hour'],as_index=False).agg({'supply hours':sum,'busy':sum})
busy_hour['utiliz'] = busy_hour['busy']/busy_hour['supply hours']
busy_hour

12点司机在忙总时长最长,在忙率也最高,用户订单请求也最多,说明车辆总数偏少。

2.7 订单时长

trip_min = city.groupby(['hour'],as_index=False).agg({'average minutes of trips':np.mean})
trip_min

12点用户订单需求较多,同时订单时长最长,说明这个时间点是一个非常重要的时间点。

supply_hour = city.groupby(['hour'],as_index=False).agg({'supply hours':np.mean})
supply_hour

13点订单量也较大,此时点司机服务时长较短。

为优化用户出行体验,司机运营平台可联合客运部可考虑此时段尽量分配总服务时长较长的司机来接单(经验较为丰富)。

3、后续思考方向:

  • 提升顾客预计等待时长预测准确度(需要历史数据进行预测)
  • 加大车辆投入(分车辆不同等级来看,因此可能需要车辆相关信息表)
  • 优化用户体验(需要客诉相关数据)
  • 优化平台派单逻辑(需要订单的位置相关数据)
  • 个性化需求(需要用户属性、及其他行为数据)


本文相关代码下载:

https://alltodata.cowtransfer.com/s/9bb9acdc15ae40


推荐一本书,本周末统一上架

感谢北京大学出版社的大力支持

PS  当当新用户优惠码:DPC3CX

满60-20,亲测可以换手机号使用

本文分享自微信公众号 - 凹凸数据(alltodata)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。


推荐阅读
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • ABBYY FineReader:高效PDF转换、精准OCR识别与文档对比工具
    在处理PDF转换和OCR识别时,您是否遇到过格式混乱、识别率低或图表无法正常识别的问题?ABBYY FineReader以其强大的功能和高精度的识别技术,完美解决这些问题,帮助您轻松找到最终版文档。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
author-avatar
腾讯财经321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有